import fetch from "node-fetch";
import { segment } from "oicq";
import { createLogger } from '../modules/Logger.js'; 

// 获取头像 URL 的方法
function getAvatarUrl(userId) {
  return `https://q1.qlogo.cn/g?b=qq&s=0&nk=${userId}`; // 根据 QQ 号生成头像 URL
}

export class PippiLoliPlugin extends plugin {
  constructor() {
    super({
      name: '皮皮の图库',
      dsc: '随机发送皮图',
      event: 'message',
      priority: 500,
      rule: [
        {
          reg: "^#?(皮皮搜图)(.*)$", 
          fnc: 'sendLoli',
          permission: 'all'
        }
      ]
    });
    
    // 初始化日志实例
    this.logger = createLogger(this.name);
  }

  // 获取图片的方法，支持指定数量
  async fetchImages(tag, num = 1) {
    const primaryUrl = `https://api.napneko.me/?keyword=${encodeURIComponent(tag)}`;
    const fallbackUrl = `https://api.lolicon.app/setu/v2?tag=${encodeURIComponent(tag)}&num=${num}&r18=0`;

    try {
      // 尝试使用主 API 获取图片
      const primaryResponse = await fetch(primaryUrl);
      if (!primaryResponse.ok) {
        this.logger.error(`主 API 请求失败, 状态码: ${primaryResponse.status}`);
        throw new Error(`主 API 请求失败, 状态码: ${primaryResponse.status}`);
      }

      const primaryData = await primaryResponse.json();
      if (!primaryData.links || primaryData.links.length === 0) {
        this.logger.error('主 API 未找到图片链接');
        throw new Error('主 API 未找到图片链接');
      }

      const images = primaryData.links.slice(0, num); // 获取前 num 张图片链接
      this.logger.info(`成功获取到 ${images.length} 张图片链接`);
      return images;
    } catch (primaryError) {
      this.logger.error(`主 API 获取图片时发生错误: ${primaryError.message}`);
      this.logger.info('尝试使用备用 API 获取图片...');

      try {
        // 尝试使用备用 API 获取图片
        const fallbackResponse = await fetch(fallbackUrl);
        if (!fallbackResponse.ok) {
          this.logger.error(`备用 API 请求失败, 状态码: ${fallbackResponse.status}`);
          throw new Error(`备用 API 请求失败, 状态码: ${fallbackResponse.status}`);
        }

        const fallbackData = await fallbackResponse.json();
        if (!fallbackData.data || fallbackData.data.length === 0) {
          this.logger.error('备用 API 未找到图片链接');
          throw new Error('备用 API 未找到图片链接');
        }

        const images = fallbackData.data.slice(0, num).map(item => item.urls.original); // 获取前 num 张图片链接
        this.logger.info(`成功获取到 ${images.length} 张图片链接`);
        return images;
      } catch (fallbackError) {
        this.logger.error(`备用 API 获取图片时发生错误: ${fallbackError.message}`);
        throw new Error('主 API 和备用 API 均无法获取图片');
      }
    }
  }

  // 构造消息并发送转发消息
  async sendLoli(e) {
    const args = e.msg.replace(/^#?(皮皮搜图)/, '').trim(); 
    const [tag, numStr] = args.split(' '); // 分离标签和数量
    const num = parseInt(numStr, 10) || 1; // 默认为 1 张

    if (num < 1 || num > 5) {  // 限制最多请求 5 张图片
      await e.reply('请提供合理的图片数量（1-5）。');
      return;
    }

    try {
      this.logger.info(`正在寻找${num}张${tag ? `关于"${tag}"的` : ''}皮图，请稍等~`);
      await e.reply(`正在寻找${num}张${tag ? `关于"${tag}"的` : ''}皮图，请稍等~`);

      // 获取图片链接
      const validImages = await this.fetchImages(tag, num);

      if (validImages.length === 0) {
        await e.reply('未找到可用的皮图，请稍后再试~');
        return;
      }

      // 获取用户和机器人信息
      const userId = e.user_id;
      const userNickname = e.sender.nickname || '未知用户';
      const userAvatar = getAvatarUrl(userId);

      const botId = Bot.uin;
      const botNickname = "皮皮助手";
      const botAvatar = getAvatarUrl(botId);

      // 构造消息列表
      const messages = [];

      const title = tag ? `来点${tag}の图` : '来点图';
      messages.push({
        message: title,
        user_id: botId,
        nickname: botNickname,
        face: botAvatar,  // 使用头像URL
      });

      // 添加图片消息
      validImages.forEach(url => {
        messages.push({
          message: segment.image(url),
          user_id: userId,
          nickname: userNickname,
          face: userAvatar,  // 使用头像URL
        });
      });

      // 构造转发消息并发送
      const sendResult = await e.reply(await e.group.makeForwardMsg(messages)); // 捕获返回值

      // 如果发送失败，直接记录日志
      if (sendResult.retcode !== 0) {
        this.logger.error(`消息发送失败，retcode: ${sendResult.retcode}, 错误信息: ${sendResult.message}`);
        await e.reply('消息发送失败，请稍后再试。');
      } else {
        this.logger.info('消息发送成功');
      }
    } catch (error) {
      this.logger.error(`发生错误: ${error.message}`);
      await e.reply(`发生错误: ${error.message}`); 
    }
  }
}